package com.xu.system.controller;

import com.xu.base.model.BaseSelectVo;
import com.xu.mybatis.model.PageInfo;
import com.xu.system.model.pojo.role.*;
import com.xu.system.service.IRoleService;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * 角色控制器
 *
 * @Author: 许乾伟
 * @Date: 2024/3/21 15:22
 */
@RestController
@RequestMapping("role")
public class RoleController {
    @Autowired
    IRoleService roleService;

    /**
     * 新增角色
     * @param req 新增角色请求
     * @return true:成功;false:失败
     */
    @PostMapping("add")
    public Boolean add(@Valid @RequestBody AddRoleReq req) {
        return roleService.add(req);
    }
    /**
     * 编辑角色
     * @param req 编辑角色请求
     * @return true:成功;false:失败
     */
    @PostMapping("edit")
    public Boolean edit(@Valid @RequestBody EditRoleReq req) {
        return roleService.edit(req);
    }
    /**
     * 删除角色
     * @param roleId 角色id
     * @return true:成功;false:失败
     */
    @PostMapping("del/{roleId}")
    public Boolean del(@PathVariable("roleId") Long roleId) {
        return roleService.del(roleId);
    }

    /**
     * 角色详情
     * @param roleId
     * @return
     */
    @GetMapping("detail/{roleId}")
    public RoleVo detail(@PathVariable("roleId") Long roleId) {
        return roleService.detail(roleId);
    }

    /**
     * 分页查询角色
     * @param req 分页查询角色请求
     * @return 角色分页列表
     */
    @GetMapping("page")
    public PageInfo<RoleSimpleVo> page(@Valid QueryRoleReq req) {
        return roleService.pageInfo(req);
    }

    /**
     * 角色下拉列表
     * @return
     */
    @GetMapping("allSelectList")
    public List<BaseSelectVo<Long,String>> allSelectList() {
        return roleService.allSelectList();
    }

    /**
     * 角色授权
     * @param req
     * @return
     */
    @PostMapping("authorize")
    public Boolean authorize(@RequestBody RoleAuthorizeReq req) {
        return roleService.authorize(req);
    }

    /**
     * 角色关联信息查询
     * @param roleId
     * @return
     */
    @GetMapping("getRoleRelevanceVo/{roleId}")
    public RoleRelevanceVo getRoleRelevanceVo(@PathVariable("roleId") Long roleId){
        return roleService.getRoleRelevanceVo(roleId);
    }

    /**
     * 删除角色用户
     * @param req
     * @return
     */
    @PostMapping("delRoleUser")
    public Boolean delRoleUser(@RequestBody DelRoleUserReq req){
        return roleService.delRoleUser(req);
    }
}
